/*
 * ImageWatcher.h
 *
 *  Created on: 2018年5月11日
 *      Author: zhengboyuan
 */

#ifndef IMAGEWATCHER_H_
#define IMAGEWATCHER_H_

#include "BasicType.h"
#include "ImageWatcherType.h"



class DLLEXPORT ImageWatcher
{
public:
	/**
	 * 初始化
	 */
	static void startup();

	/**
	 * 清理
	 */
	static void cleanup();

	/**
	 * 单实例模式
	 * @return
	 */
	static ImageWatcher& instance();

public:
	virtual ~ImageWatcher() {}

	/**
	 * 设置数据库路径.
	 * 默认为当前目录 datastore.s3db
	 * @param filepath	数据库路径
	 */
	virtual void setDb(const char* filepath) =0;

	/**
	 * 添加图片目录.
	 * 在 open 之前调用.
	 * @param imageDir  图片目录
	 * @param urlPath   URL路径, 以 / 开头. 为空表示自动选取.
	 * @return true 表示成功
	 */
	virtual bool addImageDir(const char* imageDir, const char* urlPath) =0;

	/**
	 * 打开
	 * @param port	HTTP 端口
	 * @param webroot	web目录, 为空时表示当前 webroot 目录
	 * @return
	 */
	virtual int open(uint16_t port, const char* webroot) =0;

	virtual void close() =0;

	virtual bool isOpen() =0;

	/**
	 * 添加事件记录
	 * @param record
	 * @return true 表示成功. record.id 将会被填写
	 */
	virtual bool addEvent(EventRecord& record) =0;

	/**
	 * 添加图片记录
	 * @param record
	 * @return
	 */
	virtual bool addImage(ImageRecord& record) =0;

	/**
	 * 查找图片记录
	 * @param company	企业, 为空表示忽略该条件
	 * @param station	工位名称, 为空表示忽略
	 * @param num		工位号
	 * @param fromTime	起始时间
	 * @param toTime	截止时间
	 * @param records	记录
	 * @param size		记录个数
	 * @return	查询到的记录个数
	 */
	virtual int findImage(const char* company, const char* station, int num, time_t fromTime, time_t toTime, ImageRecord* records, int size) = 0;

	/**
	 * 查找事件记录
	 * @param company	企业, 为空表示忽略该条件
	 * @param station	工位名称, 为空表示忽略
	 * @param num		工位号
	 * @param fromTime	起始时间
	 * @param toTime	截止时间
	 * @param records	记录
	 * @param size		记录个数
	 * @return	查询到的记录个数
	 */
	virtual int findEvent(const char* company, const char* station, int num, time_t fromTime, time_t toTime, EventRecord* records, int size) = 0;

	/**
	 * 根据图片路径查询图片记录
	 * @param filepath
	 * @param record
	 * @return true 表示找到
	 */
	virtual bool queryImage(const char* filepath, ImageRecord& record) =0;

	/**
	 * 根据图片路径查询事件记录
	 * @param filepath
	 * @param record
	 * @return
	 */
	virtual bool queryEvent(const char* filepath, EventRecord& record) =0;

	/**
	 * 删除事件记录
	 * @param id	记录ID
	 * @return	true 表示成功
	 */
	virtual bool deleteEvent(int id) =0;

	/**
	 * 删除图片记录
	 * @param id	记录ID
	 * @return	true 表示成功
	 */
	virtual bool deleteImage(int id) =0;

	/**
	 * 更新事件记录
	 * @param record    事件记录, id 必须是有效的.
	 */
	virtual bool updateEvent(EventRecord& record) =0;

};

#endif /* IMAGEWATCHER_H_ */
